A number of requesters may want to use a limited resource. For example, a number of requestors associated with different input ports may receive information packets that need to be processed and transmitted via a single output port. A resource allocation unit may then allocate the resource to one of those requesters.
The resource allocation unit could scan a list of requestors (starting with the first requestor in the list) and simply allocate the resource to the first requester that is currently requesting the resource. This approach, however, may not be fair. If, for example, the first requester in the list constantly requests the resource, the resource will never be allocated to other requesters.
To avoid this, a “round-robin” approach to resource allocation may be used. For example, a resource allocation unit might scan a list of requestors and allocate the resource to the first requestor that is currently requesting the resource. The next time the resource is to be allocated, however, the resource allocation scans the list starting with the next requestor (e.g., if the resource was allocated to the fourth requestor during one cycle, the list would be scanned starting with fifth requestor during the next clock cycle).
A round-robin approach, however, may be difficult to implement. For example, the hardware used to implement the approach might consume a significant amount of silicon area (e.g., variable shift logic may result in a high gate count, especially when there are a large number of requestors). Moreover, it may take a significant amount of time to perform the resource allocation (e.g., it may be difficult to perform the allocation in a single clock cycle).